﻿#include <string.h>
#include <Sys\RenderUnit\SysRenderDatagram\TESTRD.HPP>

#define CTest_ClassID L"E2B505F1583243438CD0E430B3A484FE"

using namespace CxxlMan;
using namespace Cxxl3D;

cxxlObject *cxxlFASTCALL New_CTestRD();
cxxlPreserve2 *cxxlFASTCALL Regenera_CTestRD(const wchar_t *ClassID);

// 金字塔形的8條邊線
Vector4 g_vertices[] =
{
	Vector4(-1.0f, 1.0f,-1.0f,1.0),
	Vector4(-1.0f,-1.0f,-1.0f,1.0),

	Vector4(-1.0f,-1.0f,-1.0f,1.0),
	Vector4( 1.0f,-1.0f,-1.0f,1.0),

	Vector4( 1.0f,-1.0f,-1.0f,1.0),
	Vector4( 1.0f, 1.0f,-1.0f,1.0),

	Vector4( 1.0f, 1.0f,-1.0f,1.0),
	Vector4(-1.0f, 1.0f,-1.0f,1.0),

	Vector4( 0.0f, 0.0f, 1.0f,1.0),
	Vector4(-1.0f, 1.0f,-1.0f,1.0),

	Vector4( 0.0f, 0.0f, 1.0f,1.0),
	Vector4(-1.0f,-1.0f,-1.0f,1.0),

	Vector4( 0.0f, 0.0f, 1.0f,1.0),
	Vector4( 1.0f,-1.0f,-1.0f,1.0),

	Vector4( 0.0f, 0.0f, 1.0f,1.0),
	Vector4( 1.0f, 1.0f,-1.0f,1.0),
};


class CTestRD:public ITestRD
{

  virtual void cxxlFASTCALL GetData(unsigned int *Count, Vector4 **ppVector4) const
  {
    *Count = 8;
    *ppVector4 = g_vertices;
  }

protected:
  // 儲存容器藉此取得要永續存取的屬性資料
  // 延伸類別須以 virtual 的形式覆寫
  // 並且須呼叫上層類別的此函數
  virtual bool cxxlFASTCALL Ref(Filter *F)
  {
    if(F != NULL && ITestRD::Ref(F))
      return true;
    else
      return false;
  }

public:
  // Constructor
  CTestRD()
    :cxxlObject(CxxlMan::Spirit_Easy),    
    cxxlPreserve2(CTest_ClassID) // 在建構時指定 ClassID
  {
  }
  virtual ~CTestRD()
  {
  }


  friend cxxlObject *cxxlFASTCALL New_CTestRD();
  friend cxxlPreserve2 *cxxlFASTCALL Regenera_CTestRD(const wchar_t *ClassID);
};


cxxlObject *cxxlFASTCALL New_CTestRD()
{
  return new CTestRD();
}

cxxlPreserve2 *cxxlFASTCALL Regenera_CTestRD(const wchar_t *ClassID)
{
  if(wcscmp(CTest_ClassID, ClassID) == 0)
    return new CTestRD;
  else
    return NULL;

}
